import config from '../config'
import * as userApi from '@/api/user.js'
import * as loginApi from '@/api/login.js'
import wxLogin from '@/utils/wxLogin.js'
// app一键登录配置
var univerifyStyle =  {  
    "fullScreen": true, // 是否全屏显示，默认值： false
    "backgroundColor": "#ffffff",  // 授权页面背景颜色，默认值：#ffffff
    "backgroundImage": "", // 全屏显示的背景图片，默认值："" （仅支持本地图片，只有全屏显示时支持）  
    "icon": {  
        "path": "" // 自定义显示在授权框中的logo，仅支持本地图片 默认显示App logo   
    },  
    "closeIcon": {  
        "path": "" // 自定义关闭按钮，仅支持本地图片。 HBuilderX3.3.7+版本支持
    },  
    "phoneNum": {  
        "color": "#202020"  // 手机号文字颜色 默认值：#202020  
    },  
    "slogan": {  
        "color": "#BBBBBB"  //  slogan 字体颜色 默认值：#BBBBBB  
    },  
    "authButton": {  
        "normalColor": "#0eb6ff", // 授权按钮正常状态背景颜色 默认值：#3479f5  
        "highlightColor": "#2861c5",  // 授权按钮按下状态背景颜色 默认值：#2861c5（仅ios支持）  
        "disabledColor": "#73aaf5",  // 授权按钮不可点击时背景颜色 默认值：#73aaf5（仅ios支持）  
        "textColor": "#ffffff",  // 授权按钮文字颜色 默认值：#ffffff  
        "title": "本机号码一键登录", // 授权按钮文案 默认值：“本机号码一键登录”  
        "borderRadius": "24px"	// 授权按钮圆角 默认值："24px" （按钮高度的一半）
    },  
    "otherLoginButton": {  
        "visible": true, // 是否显示其他登录按钮，默认值：true  
        "normalColor": "", // 其他登录按钮正常状态背景颜色 默认值：透明 
        "highlightColor": "", // 其他登录按钮按下状态背景颜色 默认值：透明 
        "textColor": "#656565", // 其他登录按钮文字颜色 默认值：#656565  
        "title": "其他登录方式", // 其他登录方式按钮文字 默认值：“其他登录方式”  
        "borderColor": "",  //边框颜色 默认值：透明（仅iOS支持）  
        "borderRadius": "0px" // 其他登录按钮圆角 默认值："24px" （按钮高度的一半）
    },   
    "privacyTerms": {  
        "defaultCheckBoxState":true, // 条款勾选框初始状态 默认值： true
        "uncheckedImage":"", // 可选 条款勾选框未选中状态图片（仅支持本地图片 建议尺寸 24x24px）(3.2.0+ 版本支持)   
        "checkedImage":"", // 可选 条款勾选框选中状态图片（仅支持本地图片 建议尺寸24x24px）(3.2.0+ 版本支持)   
        "checkBoxSize":12, // 可选 条款勾选框大小，仅android支持
        "textColor": "#BBBBBB", // 文字颜色 默认值：#BBBBBB  
        "termsColor": "#0eb6ff", //  协议文字颜色 默认值： #5496E3  
        "prefix": "我已阅读并同意", // 条款前的文案 默认值：“我已阅读并同意”  
        "suffix": "并使用本机号码登录", // 条款后的文案 默认值：“并使用本机号码登录”  
        "privacyItems": [  // 自定义协议条款，最大支持2个，需要同时设置url和title. 否则不生效  
            {  
                "url": config.yinsiXy, // 点击跳转的协议详情页面  
                "title": "团团收隐私协议" // 协议名称  
            },
						{
						    "url": config.userXy, // 点击跳转的协议详情页面  
						    "title": "团团收用户协议" // 协议名称  
						}  
        ]  
    },
    // "buttons": {  // 自定义页面下方按钮仅全屏模式生效（3.1.14+ 版本支持）
    //     "iconWidth": "45px", // 图标宽度（高度等比例缩放） 默认值：45px
    //     "list": [
    //         {
    //             "provider": "apple",
    //             "iconPath": "/static/apple.png" // 图标路径仅支持本地图片
    //         }, 
    //         {
    //             "provider": "weixin",
    //             "iconPath": "/static/wechat.png" // 图标路径仅支持本地图片
    //         }
    //     ]
    // }
}
var errList = {
	"1000":"检查是否配置/已通过审核",
	"1001":"检查账号一键登录服务是否正常",
	"1002":"请联系客服",
	"4001":"校验异常，联系官方人员",
	"4003":"校验异常，联系官方人员",
	"5000":"联系官方人员",
	"20202":"终端未开启SIM流量",
	"30001":"当前网络环境不适合执行该操作",
	"30004":"其他错误,联系官方人员",
	"30005":"不具备一键登录的使用前提，设备不支持/未开启数据流量/其他原因",
	"30006":"登录失败",
	"30007":"校验异常，联系官方人员",
	"40004":"应用不存在",
	"40047":"校验异常，联系官方人员",
	"40053":"校验异常，联系官方人员",
	"40101":"检查一下手机卡类型是否是正常运营商手机卡，关闭飞行模式后重新尝试。",
	"40201":"检查一下手机卡类型是否是正常运营商手机卡，关闭飞行模式后重新尝试。",
	"40301":"检查一下手机卡类型是否是正常运营商手机卡，关闭飞行模式后重新尝试。"
}
/**
 * 工具类
 */
//假象开关
function checkConfig(){
	phoneConfig.config({}).then(res => {
		if(res.code === 1){
			// #ifdef MP-TOUTIAO || MP-WEIXIN
			// uni.setStorageSync("xcxConfig",res.data.dy_mini.status)
			console.log(res.data.dy_mini.status);
			return res.data.dy_mini.status
			// #endif
			// #ifndef MP-TOUTIAO || MP-WEIXIN
			// uni.setStorageSync("xcxConfig",0)
			return 0
			// #endif
			// if(res.data.dy_mini.status === 1){
			// 	uni.hideTabBar()
			// 	uni.reLaunch({
			// 		url:"/pages/phone/index/index"
			// 	})
			// }
		}
	})
}
//假象开关
function checkConfig1(){
	phoneConfig.config({}).then(res => {
		// #ifdef APP-PLUS
		return false
		// #endif
		if(res.code === 1){
			if(res.data.dy_mini.status === 1){
				return true
			}else{
				return false
			}
		}{
			return false
		}
	})
}
// 手机号格式检查
function checkPhone(mobile){
	return !mobile.match(/^1[3|4|5|6|7|8|9][0-9]{9}$/);
}
// 展示手机号加密
function checkHide(mobile){
	if(mobile){
		return mobile.substr(0,3) + "****" + mobile.substr(7);
	}
		return
}
// 协议接口
function getContent(index){
	return new Promise((relove,reject) => {
		userApi.getContent({
			type:index === 1?7:index === 2?6:8
		})
		.then(result => {
			relove(result.data)
		})
	})

}
// 打开协议
async function checkProtocol(index){
	let data = await getContent(index)
	let url = `${config.fronUrl}/${data.url}`
	// #ifdef H5
	location.href = url
	// location.href(url)
	// #endif
	// #ifndef H5
	uni.setStorageSync('protocol',url)
	uni.navigateTo({
		url:"/pages/protocol/index?name=" + data.name
	})
	// #endif
}
	// 判断是否是微信浏览器
function checkBrowser(){
	var ua = window.navigator.userAgent.toLowerCase();
	return ua.match(/MicroMessenger/i) == "micromessenger"
}
//判断是否是支付宝浏览器
function checkBrowseralpy(){
	if (/AlipayClient/.test(window.navigator.userAgent)) {
		return true
	}else{
		return false
	}
}
// 取地址栏url
function checkgetUrlParam(name){
	let url = window.location.href;
	let requestParams = {};
	if (url.indexOf("?") !== -1) {
		let str = url.substr(url.indexOf("?") + 1); //截取?后面的内容作为字符串
		let strs = str.split("&"); //将字符串内容以&分隔为一个数组
		for (let i = strs.length-1; i >= 0 ; i--) {
			if(decodeURI(strs[i].split("=")[0]) == name){
				return decodeURI(strs[i].split("=")[1])
			}
		}
	}
	return '';
}
// 截取url上邀请码yq
function checkgetYq(){
	let url = window.location.href
	let requestParams = {};
	if(url.indexOf("#") != -1){
		
		let list = url.split('#')
		if(list.length > 1){
			let list_yq = list[list.length - 1].split('?')
			
			if(list_yq.length > 1){
				
				if(list_yq[list_yq.length-1].indexOf("&") != -1){
					let str = list_yq[list_yq.length-1].split('&')
					
					for(let i=0;i<str.length;i++){
						if(decodeURI(str[i].split('=')[0]) === 'yq'){
							return decodeURI(str[i].split("=")[1])
						}
					}
				}else{
					return decodeURI(list_yq[list_yq.length-1].split('=')[1])
				}
			}else{
				if(url.indexOf("?") != -1){
							 let str1 = url.split('?')
								if(str1.length > 1){
									let str2 = str1[str1.length-1]
									if(str2.indexOf('&') != -1){
										let str3 = str2.split('&')
										for(let i=0;i<str3.length;i++){
											if(decodeURI(str3[i].split('=')[0]) === 'yq'){
												return decodeURI(str3[i].split("=")[1])
											}
										}
									}else{
										return decodeURI(str2.split('=')[1])
									}
								}
				}else{
							 return ''
				}
			}
		}else{
			return ''
		}
	}else{
		 if(url.indexOf("?") != -1){
			 let str1 = url.split('?')
				if(str1.length > 1){
					let str2 = str1[str1.length-1]
					if(str2.indexOf('&') != -1){
						let str3 = str2.split('&')
						for(let i=0;i<str3.length;i++){
							if(decodeURI(str3[i].split('=')[0]) === 'yq'){
								return decodeURI(str3[i].split("=")[1])
							}
						}
					}else{
						return decodeURI(str2.split('=')[1])
					}
				}
		 }else{
			 return ''
		 }
	}
}
// 获取微信授权code（h5）
function checkgetCode(){
	let local = encodeURIComponent(window.location.href);
	let appid =  uni.getStorageSync('appid')
	let _this = this
	if(appid){
		window.location.href =
		"https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+
		"&redirect_uri=" +
		local +
		"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
	}else{
		let _this = this
		userApi.app_wx({
			wxapp_id: _this.$wxapp_id,
		}).then(res => {
			uni.setStorageSync('appid',res.data)
			window.location.href =
			"https://open.weixin.qq.com/connect/oauth2/authorize?appid="+res.data+
			"&redirect_uri=" +
			local +
			"&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
		})
	
	}
}// 获取支付宝授权code（h5）
function checkgetCodeAlipay(){
	//  如果没有code，说明用户还没授权
	let appID = "2021003142628063"; // 你的 APPId
	let local = encodeURIComponent('https://lipin.tuantuanshou.com/h5/pages/index/index');
	let authorizeUrl =
			'https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id='+appID+'&scope=auth_user&redirect_uri='+local
	    // `https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=${appID}&scope=auth_user&redirect_uri=` +
	    // `${encodeURIComponent(
	    //     window.location.href
	    // )}`+`&state=init`;
	window.location.href = authorizeUrl; // 跳转链接获取code
}
// 银行卡规则
function checkBank(bankno){
	
	  let lastNum = bankno.substr(bankno.length - 1, 1) // 取出最后一位（与luhm进行比较）
	  let first15Num = bankno.substr(0, bankno.length - 1) // 前15或18位
	  let newArr = []
	  for (let i = first15Num.length - 1; i > -1; i--) { // 前15或18位倒序存进数组
	    newArr.push(first15Num.substr(i, 1))
	  }
	  let arrJiShu = [] // 奇数位*2的积 < 9
	  let arrJiShu2 = [] // 奇数位*2的积 >9
	 
	  let arrOuShu = [] // 偶数位数组
	  for (let j = 0; j < newArr.length; j++) {
	    if ((j + 1) % 2 === 1) { // 奇数位
	      if (parseInt(newArr[j]) * 2 < 9) {
	        arrJiShu.push(parseInt(newArr[j]) * 2)
	      } else {
	        arrJiShu2.push(parseInt(newArr[j]) * 2)
	      }
	    } else {
	      arrOuShu.push(newArr[j])
	    }// 偶数位
	  }
	  let jishuChild1 = [] // 奇数位*2 >9 的分割之后的数组个位数
	  let jishuChild2 = [] // 奇数位*2 >9 的分割之后的数组十位数
	  for (let h = 0; h < arrJiShu2.length; h++) {
	    jishuChild1.push(parseInt(arrJiShu2[h]) % 10)
	    jishuChild2.push(parseInt(arrJiShu2[h]) / 10)
	  }
	  let sumJiShu = 0 // 奇数位*2 < 9 的数组之和
	  let sumOuShu = 0 // 偶数位数组之和
	  let sumJiShuChild1 = 0 // 奇数位*2 >9 的分割之后的数组个位数之和
	  let sumJiShuChild2 = 0 // 奇数位*2 >9 的分割之后的数组十位数之和
	  let sumTotal = 0
	  for (let m = 0; m < arrJiShu.length; m++) {
	    sumJiShu = sumJiShu + parseInt(arrJiShu[m])
	  }
	  for (let n = 0; n < arrOuShu.length; n++) {
	    sumOuShu = sumOuShu + parseInt(arrOuShu[n])
	  }
	  for (let p = 0; p < jishuChild1.length; p++) {
	    sumJiShuChild1 = sumJiShuChild1 + parseInt(jishuChild1[p])
	    sumJiShuChild2 = sumJiShuChild2 + parseInt(jishuChild2[p])
	  }
	  // 计算总和
	  sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2)
	  // 计算Luhm值
	  let k = parseInt(sumTotal) % 10 === 0 ? 10 : parseInt(sumTotal) % 10
	  let luhm = 10 - k
	  if (Number(lastNum) === luhm && lastNum.length !== 0 && bankno.length > 11) {
	    return true
	  } else {
	    return false
	  }
}
function checkAppSource() {
		switch(uni.getSystemInfoSync().platform){
			case 'android':
			return ''
			break
			case "ios":
			return 1
			break
		}
}
// 富文本转换
function checkescape2Html(str){
	let arrEntities = {
		'lt': '<',
		'gt': '>',
		'nbsp': ' ',
		'amp': '&',
		'quot': '"'
	};
	return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function(all, t) {
		return arrEntities[t];
	});
}
// 客服链接去掉转义部分
function checkserviceUrl(url){
	let list = ''
	if(url.indexOf('amp;') != -1){
		list = url.split('amp;')
		url = list.join('')
	}
	return url
}
// 判断是否是苹果设备
function checkIos(){
	var u = navigator.userAgent
	var isIOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
	 if(isIOS){
			return true
		}else{
			return false
		}
}
// 判断是否是手机
function checkisMobile() {
	 let flag = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i)
	 return flag;
}
// h5进入在线客服
function checkH5service(url,user_id){
	// #ifdef H5
	if(checkisMobile()){
		let id = user_id?"ID："+user_id:"未登录"
		var _53 = $53.createApi()
		_53.push('cmd','member');
		_53.push('name',id);
		_53.query();
		_53.push('cmd','mtalk');
		_53.query()
	}else{
		  window.open(url)
	}
	

	// 弹窗打开客服h5
	// #endif
	// #ifdef APP-PLUS 
	if(url){
		let url_obj = checkserviceUrl(url)
		console.log(url_obj);
		url_obj = url_obj + "?u_cust_id=999&u_cust_name=ID:"+user_id+"&u_custom_info="
		plus.runtime.openURL(url_obj,function(res){
			
		})
	}else{
		let _this = this;
		let token = uni.getStorageSync("AccessToken")
		userApi.connection({
				wxapp_id: _this.$wxapp_id,
				token: token,
			})
			.then(result => {
				let url_obj = checkserviceUrl(result.data.link)
				url_obj = url_obj + "?u_cust_id=999&u_cust_name=ID:"+user_id+"&u_custom_info="
				plus.runtime.openURL(url_obj,function(res){
					
				})
			})
			.finally(() => console.log(465456))
		
	}
	// #endif
}
function appPhoneLogin(type){
	uni.showLoading({
		title: '加载中',
		mask: true,
	})
	let _this = this
	if(checkfacility() === 2){
		uni.hideLoading()
	}
	uni.login({
		provider: 'univerify',
		univerifyStyle:univerifyStyle,
		success(res) { // 登录成功
		uni.hideLoading()
		console.log(res)
			loginApi.mePhone({
				openid:res.authResult.openid,
				appid:'__UNI__E9ECD49',
				access_token:res.authResult.access_token
			}).then(result => {
				console.log(result)
				if(result.code === 1){
					uni.showToast({
						title:"登录成功",
					})
					uni.setStorageSync("AccessToken",result.data)
					setTimeout(() => {
						uni.closeAuthView()
						uni.switchTab({
							url:"/pages/index/index"
						})
					},500)
				}else{
					uni.showToast({
						title:result.msg,
						icon:"none"
					})
					setTimeout(() => {
						if(type !=1 ){
							uni.closeAuthView()
							uni.navigateTo({
								url:'/pages/login/index'
							})
						}
					},500)
				}
			})			
		},
		fail(err) { // 登录失败
		uni.hideLoading()
		if(err.errCode === 30002){
			uni.closeAuthView()
			uni.navigateTo({
				url:'/pages/login/index'
			})
		}else{
			if(!errList[err.errCode]){
				setTimeout(() => {
					uni.closeAuthView()
					uni.navigateTo({
						url:'/pages/login/index'
					})
				},1000)
			}else{
				uni.showToast({
					title:errList[err.errCode],
					icon:"none"
				})
				setTimeout(() => {
					uni.closeAuthView()
					uni.navigateTo({
						url:'/pages/login/index'
					})
				},1000)
			}

		}

		}
	})
}
// 不同平台登录
function checkLoinjudge(){
	let _this = this
	// #ifdef H5
	if(checkBrowser()){
				uni.navigateTo({
					url:"/pages/login/index"
				})
		// wxLogin.logins()
	}else{
		uni.navigateTo({
			url:"/pages/login/index"
		})
	}
	// #endif 
	// #ifdef MP
	uni.navigateTo({
		url:"/pages/login/mp"
	})
	// #endif
	// #ifdef APP-PLUS
	appPhoneLogin()
	// uni.navigateTo({
	// 	url:"/pageace_cart/pages/login/index"
	// })
	// #endif
}
function checkfacility(){
	switch(uni.getSystemInfoSync().platform){
		case 'android':
			 return 1
		case 'ios':
			 return 2
		default:
			 return 3
			 break;
	}
}
// 渠道传参
/* 1已上传 2上传未通过 3上传已通过未发布
2：公众号
3：微信小程序 3.1百联ok卡回收 (1)3.2石化加油卡回收(3) 3.3话费卡回收平台(3) 3.4本元E卡回收 3.5高价京E卡回收价格（1） 3.6高价回收京E卡回收（1） 3.7万商卡回收购物卡 
3.8京E卡回收平台（3人最多） 3.9中银通支付卡回收3.10瑞祥商联卡回收 3.11京E卡回收价格(3) 3.12汇元易付卡回收(3) 3.13飞银彩虹卡回收 3.14 沃尔玛购物卡回收(3) 3.15 天虹购物卡回收价格 
3.16 世纪联华购物卡回收 3.17 大小润发购物卡回收3.18 程携礼品卡回收 3.19 华润家万购物卡回收 3.20 中欣卡中欣通卡回收 3.21中百超市购物卡 3.22 物美卡美通卡回收
3.23 天虹购物卡回收 3.24回收京e卡回收
4：百度小程序
5：字节跳动小程序
6：快手小程序
7：支付宝小程序
*/
function checkGain(){
		// #ifdef H5
		return 2
		// #endif
		// #ifdef MP-WEIXIN
		return 3
		// #endif
		// #ifdef MP-BAIDU
		return 4
		// #endif
		// #ifdef MP-TOUTIAO
		return 5
		// #endif
		// #ifdef MP-KUAISHOU
		return 6
		// #endif
		// #ifdef MP-ALIPAY
		return 7
		// #endif
}
function checkName(type){
	switch (type){
		case "3.1":
			return '百联ok卡回收'
		case "3.2":
			return '石化加油卡回收'
		case "3.3":
			return '话费卡回收平台'
		case "3.4":
			return '本元E卡回收'
		case "3.5":
			return '高价京E卡回收价格'
		case "3.6":
			return '高价回收京E卡回收'
		case "3.7":
			return '万商卡回收购物卡'
		case "3.8":
			return '京E卡回收平台'
		case "3.9":
			return '中银通支付卡回收'
		case "3.10":
			return '瑞祥商联卡回收'
		case "3.11":
			return '京E卡回收价格'
		case "3.12":
			return '汇元易付卡回收'
		case "3.13":
			return '飞银彩虹卡回收'
		case "3.14":
			return '沃尔码购物卡回收'
		case "3.15":
			return '天虹购物卡回收价格'
		case "3.16":
			return '世纪联华购物卡回收'
		case "3.17":
			return '大小润发购物卡回收'
		case "3.18":
			return '程携礼品卡回收'
		case "3.19":
			return '华润家万购物卡回收'
		case "3.20":
			return '中欣卡中欣通卡回收'
		case "3.21":
			return '中百超市购物卡回收'
		case "3.22":
			return '物美卡美通卡回收'
		case "3.23":
			return '天虹购物卡回收'
		case "3.24":
			return '回收京E卡回收'
		default:
			return ''
	}
}
function isEmpty(value){
	if (isArray(value)) {
	  return value.length === 0
	}
	if (isObject(value)) {
	  return isEmptyObject(value)
	}
	return !value
}
function urlEncode (obj = {}) {
  const result = []
  for (const key in obj) {
    const item = obj[key]
    if (!item) {
      continue
    }
    if (isArray(item)) {
      item.forEach(val => {
        result.push(key + '=' + val)
      })
    } else {
      result.push(key + '=' + item)
    }
  }
  return result.join('&')
}
/**
 * 格式化日期格式 (用于兼容ios Date对象)
 */
export const formatDate = (time) => {
  // 将xxxx-xx-xx的时间格式，转换为 xxxx/xx/xx的格式 
  return time.replace(/\-/g, "/");
}

/**
 * 对象转URL
 * @param {object} obj
 */

/**
 * 遍历对象
 */
export const objForEach = (obj, callback) => {
  Object.keys(obj).forEach((key) => {
    callback(obj[key], key)
  });
}

/**
 * 是否在数组内
 */
export const inArray = (search, array) => {
  for (var i in array) {
    if (array[i] == search) return true
  }
  return false
}

/**
 * 对Date的扩展，将 Date 转化为指定格式的String
 * 月(Y)、月(m)、日(d)、小时(H)、分(M)、秒(S) 可以用 1-2 个占位符，
 * 例子：
 * dateFormat('YYYY-mm-dd HH:MM:SS', new Date()) ==> 2020-01-01 08:00:00
 */
export const dateFormat = (fmt, date) => {
  const opt = {
    "Y+": date.getFullYear().toString(), // 年
    "m+": (date.getMonth() + 1).toString(), // 月
    "d+": date.getDate().toString(), // 日
    "H+": date.getHours().toString(), // 时
    "M+": date.getMinutes().toString(), // 分
    "S+": date.getSeconds().toString() // 秒
    // 有其他格式化字符需求可以继续添加，必须转化成字符串
  };
  let ret
  for (let k in opt) {
    ret = new RegExp("(" + k + ")").exec(fmt)
    if (ret) {
      fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
    };
  };
  return fmt
}

/**
 * 判断是否为空对象
 * @param {*} object 源对象
 */
export const isEmptyObject = (object) => {
  return Object.keys(object).length === 0
}

/**
 * 判断是否为对象
 * @param {*} object
 */
export const isObject = (object) => {
  return Object.prototype.toString.call(object) === '[object Object]'
}

/**
 * 判断是否为数组
 * @param {*} array
 */
export const isArray = (array) => {
  return Object.prototype.toString.call(array) === '[object Array]'
}

/**
 * 判断是否为空
 * @param {*} object 源对象
 */
// export const isEmpty = (value) => {
//   if (isArray(value)) {
//     return value.length === 0
//   }
//   if (isObject(value)) {
//     return isEmptyObject(value)
//   }
//   return !value
// }

/**
 * 对象深拷贝
 * @param {*} obj 源对象
 */
export const cloneObj = (obj) => {
  let newObj = obj.constructor === Array ? [] : {};
  if (typeof obj !== 'object') {
    return;
  }
  for (let i in obj) {
    newObj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i];
  }
  return newObj
}

// 节流函数
// 思路： 第一次先设定一个变量true，
// 第二次执行这个函数时，会判断变量是否true，
// 是则返回。当第一次的定时器执行完函数最后会设定变量为flase。
// 那么下次判断变量时则为flase，函数会依次运行。
export function throttle(fn, delay = 100) {
  // 首先设定一个变量，在没有执行我们的定时器时为null
  var timer = null
  return function() {
    // 当我们发现这个定时器存在时，则表示定时器已经在运行中，需要返回
    if (timer) return
    timer = setTimeout(() => {
      fn.apply(this, arguments)
      timer = null
    }, delay)
  }
}

// 防抖函数
// 首次运行时把定时器赋值给一个变量， 第二次执行时，
// 如果间隔没超过定时器设定的时间则会清除掉定时器，
// 重新设定定时器， 依次反复， 当我们停止下来时，
// 没有执行清除定时器， 超过一定时间后触发回调函数。
// 参考文档：https://segmentfault.com/q/1010000021145192
export function debounce(fn, delay) {
  let timer
  return function() {
    const that = this
    const _args = arguments // 存一下传入的参数
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(function() {
      fn.apply(that, _args)
    }, delay)
  }
}


/**
 * 数组交集
 * @param {Array} 数组1
 * @param {Array} 数组2
 * @return {Array}
 */
export const arrayIntersect = (array1, array2) => {
  return array1.filter(val => array2.indexOf(val) > -1)
}

 
module.exports = {
	checkPhone:checkPhone,
	checkHide:checkHide,
	checkBrowser:checkBrowser,
	checkgetUrlParam:checkgetUrlParam,
	checkgetYq:checkgetYq,
	checkgetCode:checkgetCode,
	checkBank:checkBank,
	checkescape2Html:checkescape2Html,
	checkH5service:checkH5service,
	checkserviceUrl:checkserviceUrl,
	checkLoinjudge:checkLoinjudge,
	checkGain:checkGain,
	checkName:checkName,
	checkProtocol:checkProtocol,
	checkfacility:checkfacility,
	checkBrowseralpy:checkBrowseralpy,
	checkgetCodeAlipay:checkgetCodeAlipay,
	checkAppSource:checkAppSource,
	checkConfig:checkConfig,
	checkConfig1:checkConfig1,
	univerifyStyle:univerifyStyle,
	appPhoneLogin:appPhoneLogin,
	checkisMobile:checkisMobile,
	checkIos:checkIos,
	isEmpty:isEmpty,
	urlEncode:urlEncode
}